--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit 8dc92a3dc90c94659704de3ec33f182c55f195e3
Parents : 8fe6752
Author : Ivan <ivan@quad4.io>
Signature : Signature validation error
Date : 2026-04-27T11:15:45-05:00
feat(locales): update localization files with new privacy settings, message auto-delete options, and community preset management features
Changes
8 files changed, 403 insertions(+), 1 deletions(-)
Diff
diff --git a/meshchatx/src/frontend/locales/de.json b/meshchatx/src/frontend/locales/de.json
index 50b35418..93746b13 100644
--- a/meshchatx/src/frontend/locales/de.json
+++ b/meshchatx/src/frontend/locales/de.json
@@ -108,6 +108,14 @@
"show_community_interfaces": "Community-Schnittstellen anzeigen",
"community_interfaces_description": "Community-gepflegte Voreinstellungen beim Hinzufügen neuer Schnittstellen anzeigen.",
"reliability": "Zuverlässigkeit",
+ "lxmf_settings_eyebrow": "LXMF",
+ "privacy_eyebrow": "Datenschutz",
+ "privacy_data_title": "Daten & Gerät",
+ "privacy_data_description": "Lokale Nachrichtenhistorie, Telemetrie für vertrauenswürdige Peers. Löschen betrifft nur dieses Gerät.",
+ "privacy_data": "Daten & Gerät",
+ "privacy_subsection_device": "Dieses Gerät",
+ "privacy_subsection_telemetry": "Mesh-Telemetrie",
+ "settings_map_eyebrow": "Karte",
"messages_description": "Steuern Sie, wie MeshChat fehlgeschlagene Zustellungen wiederholt oder eskaliert. Kontrollieren Sie das automatische Wiederholungsverhalten, die erneute Übertragung von Anhängen und Fallback-Mechanismen, um eine zuverlässige Nachrichtenzustellung über das Mesh-Netzwerk zu gewährleisten.",
"auto_resend_title": "Automatisch erneut senden, wenn Peer ankündigt",
"auto_resend_description": "Fehlgeschlagene Nachrichten werden automatisch erneut versucht, sobald das Ziel erneut sendet.",
@@ -119,6 +127,13 @@
"inbound_stamps_required_description": "Wenn aus, sind für direkte LXMF-Nachrichten an Sie keine Proof-of-Work-Stempel nötig. Wenn an, Stempelkosten unten einstellen (höher = mehr Aufwand für Sender).",
"inbound_stamp_cost": "Kosten für eingehende Nachrichtenstempel",
"inbound_stamp_description": "Proof-of-Work-Schwierigkeit für Direktzustellung, wenn eingehende Stempel aktiv sind. Bereich: 1-254. Standard: 8.",
+ "local_message_auto_delete_title": "Alte Nachrichten auf diesem Gerät löschen",
+ "local_message_auto_delete_description": "Entfernt Nachrichten aus der lokalen Datenbank nach dem eingestellten Alter. Gilt nur für dieses Gerät. Andere haben weiterhin ihre eigenen Kopien. Es wird kein Löschbefehl ins Netz gesendet.",
+ "local_message_auto_delete_age": "Nachrichten löschen, die älter sind als",
+ "local_message_auto_delete_unit_aria": "Zeiteinheit für die Aufbewahrung",
+ "local_message_auto_delete_unit_days": "Tage",
+ "local_message_auto_delete_unit_months": "Monate (je 30 Tage)",
+ "local_message_auto_delete_month_note": "Monate werden als jeweils 30 Tage gezählt. Standardmäßig deaktiviert.",
"browse_nodes": "Knoten durchsuchen",
"propagation_nodes_description": "Halten Sie Gespräche im Fluss, auch wenn Peers offline sind.",
"nodes_info_1": "Propagationsknoten halten Nachrichten sicher bereit, bis die Empfänger wieder synchronisieren.",
@@ -192,6 +207,8 @@
"message_icon_size": "Symbolgröße",
"detailed_outbound_send_status": "Detaillierter Sendestatus (ausgehend)",
"detailed_outbound_send_status_description": "Pfadfindung, Spinner und technische Tooltips beim Senden anzeigen. Wenn aus, erscheint ein einzelnes halbtransparentes Häkchen, bis es nach einigen Sekunden eskaliert.",
+ "message_timestamp_grouping": "Nachrichten-Zeitstempel gruppieren",
+ "message_timestamp_grouping_description": "Wenn aktiv, zeigt der Chat Datumsüberschriften und bündelt Zeitstempel pro Lauf auf einer Blase. Wenn aus, zeigt jede Nachricht die Uhrzeit und Datumsblasen werden ausgeblendet.",
"community_interfaces": "Community-Schnittstellen",
"preferred_node": "Bevorzugter Knoten",
"local_node": "Lokaler Knoten",
@@ -271,6 +288,13 @@
"blackhole_integration_description": "Identitäten automatisch auf der Reticulum-Transportebene sperren (Blackhole), wenn Benutzer in MeshChatX verbannt werden.",
"announce_limits": "Ankündigungslimits",
"announce_limits_description": "Begrenzt gespeicherte Ankündigungen pro Aspekt (älteste werden entfernt) und wie viele pro API-Anfrage geladen werden. Begrenzt auch Suche und erkannte Schnittstellen. Feld leeren und speichern setzt Standardwerte.",
+ "announce_store_heading": "Eingehende Ankündigungen speichern",
+ "announce_store_description": "Wenn aus, werden empfangene Ankündigungen dieses Typs nicht in der Datenbank gespeichert. Deaktivieren betrifft nur die Speicherung, nicht das Netz oder eigene Ankündigungen. Ein lokal betriebener NomadNet-Page-Node erscheint weiter in der Liste, selbst wenn NomadNet-Speicher aus ist.",
+ "announce_store_lxmf": "LXMF (lxmf.delivery)",
+ "announce_store_lxst": "LXST Telefonie (lxst.telephony)",
+ "announce_store_nomad": "NomadNet-Knoten (nomadnetwork.node)",
+ "announce_store_prop": "Verteilerknoten (lxmf.propagation)",
+ "announce_store_git": "RNGit (git.repositories)",
"announce_max_stored_heading": "Max. gespeichert pro Aspekt (Datenbank)",
"announce_fetch_limit_heading": "Standard-Seitengröße (API)",
"announce_search_max_fetch": "Max. Ankündigungen für Suche",
@@ -819,7 +843,11 @@
"pagination_page_of": "Seite {current} von {total}",
"path_unknown": "unbekannt",
"recovery": "Wiederherstellung",
+ "recovery_complete": "Datenbankwiederherstellung abgeschlossen.",
+ "recovery_confirm": "Datenbankwiederherstellung ausführen? Es wird eine vollständige Integritätsprüfung und VACUUM durchgeführt. Das kann dauern und die App kann kurz nicht reagieren. Es wird keine Backup-Datei eingespielt.",
"recovery_failed": "Wiederherstellung fehlgeschlagen",
+ "vacuum_complete": "Datenbank-Vakuum abgeschlossen.",
+ "vacuum_failed": "Datenbank konnte nicht vakuumiert werden.",
"reveal_config_file": "Datei anzeigen",
"reveal_database_file": "DB anzeigen",
"reticulum_config": "Reticulum-Konfiguration",
@@ -862,6 +890,8 @@
"failed_reload": "Neuladen von Reticulum fehlgeschlagen!",
"interface_not_found": "The selected interface for editing could not be found.",
"discovery_settings_saved": "Erkennungseinstellungen gespeichert",
+ "discovery_default_bootstrap_only": "Standard: nur Bootstrap für neue ausgehende TCP",
+ "discovery_default_bootstrap_only_hint": "Neue TCP-Client- und Backbone-Connector-Schnittstellen erhalten bootstrap_only, damit RNS sie abkoppeln kann, sobald autoconnect_discovered_interfaces erfüllt ist.",
"failed_save_discovery": "Speichern der Erkennungseinstellungen fehlgeschlagen",
"no_interfaces_found_config": "Keine Schnittstellen in der ausgewählten Konfigurationsdatei gefunden",
"failed_parse_config": "Parsen der Konfigurationsdatei fehlgeschlagen",
@@ -877,6 +907,9 @@
"community_presets_hidden_hint": "Community-Voreinstellungen sind ausgeblendet. Hier oder in den Einstellungen wieder anzeigen.",
"community_presets_show_again": "Community-Voreinstellungen anzeigen",
"community_presets_empty": "Keine Voreinstellungen. Bundle neu bauen oder public/community_interfaces.json bereitstellen.",
+ "community_presets_refresh": "Community-Voreinstellungen von directory.rns.recipes aktualisieren",
+ "community_presets_refreshed": "{count} Community-Voreinstellung(en) aktualisiert",
+ "community_presets_refresh_failed": "Community-Voreinstellungen konnten nicht aktualisiert werden",
"find_more_nodes": "Weitere Knoten finden",
"quick_import": "Schnellimport",
"quick_import_paste_hint": "Rohkonfiguration einfügen",
@@ -1161,6 +1194,19 @@
"folders_imported": "Folders imported",
"failed_import_folders": "Failed to import folders",
"failed_read_clipboard": "Failed to read from clipboard",
+ "clipboard_read_requires_secure_context": "Clipboard read needs a secure page (https or http://127.0.0.1). Using http://0.0.0.0 or another non-local HTTP origin blocks the Clipboard API—open the app on 127.0.0.1 or https, or paste with Ctrl+V.",
+ "clipboard_write_unavailable": "Could not copy automatically. Open on https or http://127.0.0.1, or select the text and copy manually.",
+ "oversized_body_notice": "Diese Nachricht ist zu groß, um sie hier anzuzeigen ({count} Zeichen). Kopieren Sie den vollständigen Text, um ihn woanders zu lesen oder zu bearbeiten.",
+ "oversized_body_copy": "Volltext kopieren",
+ "oversized_body_copied": "Vollständiger Nachrichtentext kopiert",
+ "date_divider_today": "Heute",
+ "date_divider_yesterday": "Gestern",
+ "raw_path_interface_at_send": "Pfad-Schnittstelle (beim Speichern)",
+ "raw_path_hops_at_send": "Pfad-Hops (beim Speichern)",
+ "raw_path_value_unknown": "Unbekannt",
+ "raw_path_finding_measure": "Pfadsuche beim Senden (ausgehend)",
+ "raw_path_row_hash_rnpath": "Pfadtabelle-Hash (rnpath)",
+ "raw_path_row_hash_rnpath_hint": "Entspricht dem Ziel-Hash, den Reticulum für diese Route verwendet; in der rnpath-Pfadtabelle suchen.",
"copy_message": "Nachricht kopieren",
"message_copied": "Nachricht kopiert",
"failed_copy_message": "Nachricht konnte nicht kopiert werden",
@@ -1382,6 +1428,7 @@
"utilities": "Dienstprogramme",
"power_tools": "Dienstprogramme",
"diagnostics_description": "Mesh- und Reticulum-Werkzeuge an einem Ort: Erreichbarkeit, Pfade, Dateitransfer, Übersetzung, Dokumentation und Hardware-Hilfen. Öffnen Sie eine Zeile für die vollständige Ansicht.",
+ "back_to_tools": "Zurück zu Werkzeugen",
"ping": {
"title": "Ping",
"description": "Laufzeit bis zu einem Ziel, das Ping akzeptiert."
@@ -2255,6 +2302,8 @@
"mode_change_later": "Sie können die Verbindungseinstellungen jederzeit in den Reticulum-Einstellungen ändern.",
"bootstrap_title": "Bootstrap-Knoten auswählen",
"bootstrap_desc": "Bootstrap-Knoten geben der Erkennung einen Startpunkt. Wählen Sie einen oder mehrere und fahren Sie fort.",
+ "bootstrap_only_label": "Bootstrap-only für hinzugefügte Schnittstellen",
+ "bootstrap_only_hint": "Jede hinzugefügte Schnittstelle wird als bootstrap_only markiert (temporär bis genügend Auto-Connect-Schnittstellen). Standard später unter Schnittstellen ändern.",
"bootstrap_desc_page": "Bootstrap-Knoten geben Reticulum einen Startpunkt, um den Rest des Netzwerks zu entdecken. Wählen Sie unten einen oder mehrere aus erkannten oder Community-Knoten.",
"bootstrap_discovered": "Erkannte Knoten",
"bootstrap_community": "Community-Knoten",
diff --git a/meshchatx/src/frontend/locales/en.json b/meshchatx/src/frontend/locales/en.json
index 0dd4f7e2..45923c58 100644
--- a/meshchatx/src/frontend/locales/en.json
+++ b/meshchatx/src/frontend/locales/en.json
@@ -114,6 +114,14 @@
"show_community_interfaces": "Show Community Interfaces",
"community_interfaces_description": "Surface community-maintained presets while adding new interfaces.",
"reliability": "Reliability",
+ "lxmf_settings_eyebrow": "LXMF",
+ "privacy_eyebrow": "Privacy",
+ "privacy_data_title": "Data & device",
+ "privacy_data_description": "Local message history, telemetry to trusted peers, and related options. Deleting here only affects this device.",
+ "privacy_data": "Data & device",
+ "privacy_subsection_device": "This device",
+ "privacy_subsection_telemetry": "Mesh telemetry",
+ "settings_map_eyebrow": "Map",
"messages_description": "Configure how MeshChat handles message delivery failures. Control automatic retry behavior, attachment retransmission, and fallback mechanisms to ensure reliable message delivery across the mesh network.",
"auto_resend_title": "Auto resend when peer announces",
"auto_resend_description": "Failed messages automatically retry once the destination broadcasts again.",
@@ -125,6 +133,13 @@
"inbound_stamps_required_description": "When off, direct LXMF messages to you do not require proof-of-work stamps. When on, set the stamp cost below (higher means more work for senders).",
"inbound_stamp_cost": "Inbound Message Stamp Cost",
"inbound_stamp_description": "Proof-of-work difficulty for direct delivery messages when inbound stamps are required. Range: 1-254. Default: 8.",
+ "local_message_auto_delete_title": "Delete old messages on this device",
+ "local_message_auto_delete_description": "Removes messages from the local database after the age you set. This only affects this device. Other people still have their own copies. No delete is sent to the network.",
+ "local_message_auto_delete_age": "Delete messages older than",
+ "local_message_auto_delete_unit_aria": "Time unit for message retention",
+ "local_message_auto_delete_unit_days": "days",
+ "local_message_auto_delete_unit_months": "months (30 days each)",
+ "local_message_auto_delete_month_note": "Months are counted as 30 days each. Disabled by default.",
"browse_nodes": "Browse Nodes",
"propagation_nodes_description": "Keep conversations flowing even when peers are offline.",
"nodes_info_1": "Propagation nodes hold messages securely until recipients sync again.",
@@ -195,6 +210,8 @@
"message_icon_size": "Icon size",
"detailed_outbound_send_status": "Detailed outbound send status",
"detailed_outbound_send_status_description": "Show pathfinding styling, spinners, and technical tooltips while a message is sending. When off, a single muted check is shown until sending takes a few seconds.",
+ "message_timestamp_grouping": "Group message timestamps",
+ "message_timestamp_grouping_description": "When on, the chat shows date headers and clusters timestamps on one bubble per run. When off, every message shows its time and date bubbles are hidden.",
"search_settings": "Search settings...",
"auto_resend": "Auto Resend",
"retry_attachments": "Retry Attachments",
@@ -279,6 +296,13 @@
"blackhole_integration_description": "Automatically blackhole identities at the Reticulum transport layer when banishing users in MeshChatX.",
"announce_limits": "Announce Limits",
"announce_limits_description": "Limit how many announces are kept in the database per aspect (oldest removed first) and how many load per API request. Also caps search and discovered-interface payloads. Clear a numeric field and save to restore defaults.",
+ "announce_store_heading": "Store incoming announces",
+ "announce_store_description": "When off, received announces of that type are not written to the database. Disabling a category only affects storage; it does not stop the network or your own announces. A local hosted NomadNet page node is still listed when NomadNet storage is off.",
+ "announce_store_lxmf": "LXMF (lxmf.delivery)",
+ "announce_store_lxst": "LXST telephony (lxst.telephony)",
+ "announce_store_nomad": "NomadNet nodes (nomadnetwork.node)",
+ "announce_store_prop": "Propagation nodes (lxmf.propagation)",
+ "announce_store_git": "RNGit (git.repositories)",
"announce_max_stored_heading": "Max stored per aspect (database)",
"announce_fetch_limit_heading": "Default page size (API)",
"announce_search_max_fetch": "Max announces for search",
@@ -749,7 +773,11 @@
"pagination_page_of": "Page {current} of {total}",
"path_unknown": "unknown",
"recovery": "Recovery",
+ "recovery_complete": "Database recovery finished.",
+ "recovery_confirm": "Run database recovery? This runs a full integrity check and compacts the database (VACUUM). It can take a while and the app may feel unresponsive. This does not load a backup file.",
"recovery_failed": "Recovery failed",
+ "vacuum_complete": "Database vacuum finished.",
+ "vacuum_failed": "Could not vacuum the database.",
"reveal_config_file": "Reveal File",
"reveal_database_file": "Reveal DB",
"reticulum_config": "Reticulum Config",
@@ -810,6 +838,8 @@
"failed_reload": "Failed to reload Reticulum!",
"interface_not_found": "The selected interface for editing could not be found.",
"discovery_settings_saved": "Discovery settings saved",
+ "discovery_default_bootstrap_only": "Default bootstrap-only for new outbound TCP",
+ "discovery_default_bootstrap_only_hint": "When enabled, new TCP client (and backbone connector) interfaces get bootstrap_only so Reticulum can detach them once autoconnect_discovered_interfaces is satisfied. See Reticulum bootstrapping connectivity.",
"failed_save_discovery": "Failed to save discovery settings",
"no_interfaces_found_config": "No interfaces were found in the selected configuration file",
"failed_parse_config": "Failed to parse configuration file",
@@ -825,6 +855,9 @@
"community_presets_hidden_hint": "Community presets are hidden. Show them again here or in Settings.",
"community_presets_show_again": "Show community presets",
"community_presets_empty": "No presets loaded. Rebuild the bundle or add public/community_interfaces.json.",
+ "community_presets_refresh": "Refresh community presets from directory.rns.recipes",
+ "community_presets_refreshed": "Updated {count} community interface preset(s)",
+ "community_presets_refresh_failed": "Could not refresh community presets",
"find_more_nodes": "Find more nodes",
"quick_import": "Quick Import",
"quick_import_paste_hint": "Paste raw config",
@@ -1107,6 +1140,19 @@
"folders_imported": "Folders imported",
"failed_import_folders": "Failed to import folders",
"failed_read_clipboard": "Failed to read from clipboard",
+ "clipboard_read_requires_secure_context": "Clipboard read needs a secure page (https or http://127.0.0.1). Using http://0.0.0.0 or another non-local HTTP origin blocks the Clipboard API—open the app on 127.0.0.1 or https, or paste with Ctrl+V.",
+ "clipboard_write_unavailable": "Could not copy automatically. Open on https or http://127.0.0.1, or select the text and copy manually.",
+ "oversized_body_notice": "This message is too large to display here ({count} characters). Copy the full text to read or edit it elsewhere.",
+ "oversized_body_copy": "Copy full text",
+ "oversized_body_copied": "Full message text copied",
+ "date_divider_today": "Today",
+ "date_divider_yesterday": "Yesterday",
+ "raw_path_interface_at_send": "Path interface (when recorded)",
+ "raw_path_hops_at_send": "Path hops (when recorded)",
+ "raw_path_value_unknown": "Unknown",
+ "raw_path_finding_measure": "Pathfinding at send (outbound)",
+ "raw_path_row_hash_rnpath": "Path table hash (rnpath)",
+ "raw_path_row_hash_rnpath_hint": "Same as the destination hash Reticulum used for this route; search it in the rnpath path table.",
"copy_message": "Copy message",
"message_copied": "Message copied",
"failed_copy_message": "Could not copy message",
@@ -1121,6 +1167,13 @@
"failed_to_copy_hash": "Failed to copy identity hash",
"failed_copy_address": "Failed to copy address",
"translation_failed": "Translation failed",
+ "translate_select_target": "Translate to",
+ "translating_message": "Translating...",
+ "translated_from_to": "Translated from {source} to {target}",
+ "show_original": "Show original",
+ "show_translation": "Show translation",
+ "translate_message": "Translate message",
+ "translate_target_invalid": "Choose a different target language than the source",
"failed_add_contact": "Failed to add contact",
"ingesting_paper_message": "Ingesting paper message...",
"failed_ingest_paper": "Failed to ingest paper message",
@@ -1442,6 +1495,7 @@
"utilities": "Utilities",
"power_tools": "Utilities",
"diagnostics_description": "Mesh and Reticulum utilities in one place: reachability, paths, file transfer, translation, documentation, and hardware helpers. Open any row for the full tool.",
+ "back_to_tools": "Back to tools",
"ping": {
"title": "Ping",
"description": "Measure round-trip time to another node or app that answers ping."
@@ -2367,6 +2421,11 @@
"mode_change_later": "You can change connection settings any time from Reticulum settings.",
"bootstrap_title": "Pick Bootstrap Nodes",
"bootstrap_desc": "Bootstrap nodes give discovery a starting point. Select one or more, then continue.",
+ "bootstrap_search_placeholder": "Search discovered and community…",
+ "bootstrap_search_no_match": "No nodes match your search",
+ "bootstrap_search_clear": "Clear search",
+ "bootstrap_only_label": "Bootstrap-only for added interfaces",
+ "bootstrap_only_hint": "When on, every interface you add in this step is created as bootstrap-only, which Reticulum can drop after enough links auto-connect. The default is adjustable in Interfaces, Discovery settings.",
"bootstrap_desc_page": "Bootstrap nodes give Reticulum a starting point so it can discover the rest of the network. Select one or more from discovered or community nodes below.",
"bootstrap_discovered": "Discovered Nodes",
"bootstrap_community": "Community Nodes",
diff --git a/meshchatx/src/frontend/locales/es.json b/meshchatx/src/frontend/locales/es.json
index de83fe7c..28d31b05 100644
--- a/meshchatx/src/frontend/locales/es.json
+++ b/meshchatx/src/frontend/locales/es.json
@@ -114,6 +114,14 @@
"show_community_interfaces": "Mostrar interfaces comunitarias",
"community_interfaces_description": "Superficie presets mantenidos por la comunidad al agregar nuevas interfaces.",
"reliability": "Confiabilidad",
+ "lxmf_settings_eyebrow": "LXMF",
+ "privacy_eyebrow": "Privacidad",
+ "privacy_data_title": "Datos y dispositivo",
+ "privacy_data_description": "Historial local, telemetría a pares de confianza. Borrar aquí solo afecta a este dispositivo.",
+ "privacy_data": "Datos y dispositivo",
+ "privacy_subsection_device": "Este dispositivo",
+ "privacy_subsection_telemetry": "Telemetría mesh",
+ "settings_map_eyebrow": "Mapa",
"messages_description": "Configure cómo MeshChat maneja fallos de entrega de mensajes. Controle el comportamiento automático de retry, la retransmisión de archivos adjuntos y los mecanismos de retroceso para asegurar una entrega fiable de mensajes a través de la red de malla.",
"auto_resend_title": "Reenviamiento automático cuando el par anuncia",
"auto_resend_description": "Los mensajes fallidos retratan automáticamente una vez que el destino retransmite de nuevo.",
@@ -125,6 +133,13 @@
"inbound_stamps_required_description": "Cuando está apagado, los mensajes LXMF directos a usted no requieren sellos de prueba de trabajo. Cuando está encendido, establece el costo del sello abajo (más alto significa más trabajo para los remitentes).",
"inbound_stamp_cost": "Costo de sello de mensaje",
"inbound_stamp_description": "Dificultad de prueba de trabajo para mensajes de entrega directa cuando se requieren sellos de entrada. Rango: 1-254. Por defecto: 8.",
+ "local_message_auto_delete_title": "Borrar mensajes antiguos en este dispositivo",
+ "local_message_auto_delete_description": "Elimina mensajes de la base de datos local tras la antigüedad indicada. Solo afecta a este dispositivo. Los demás conservan sus copias. No se envía un borrado a la red.",
+ "local_message_auto_delete_age": "Borrar mensajes anteriores a",
+ "local_message_auto_delete_unit_aria": "Unidad de tiempo de retención",
+ "local_message_auto_delete_unit_days": "días",
+ "local_message_auto_delete_unit_months": "meses (30 días cada uno)",
+ "local_message_auto_delete_month_note": "Cada mes cuenta como 30 días. Desactivado por defecto.",
"browse_nodes": "Nodos de navegación",
"propagation_nodes_description": "Mantenga conversaciones fluyendo incluso cuando los compañeros están fuera de línea.",
"nodes_info_1": "Los nodos de propagación mantienen mensajes de forma segura hasta que los receptores se sincronizan de nuevo.",
@@ -195,6 +210,8 @@
"message_icon_size": "Tamaño del icono",
"detailed_outbound_send_status": "Salida detallada enviar estado",
"detailed_outbound_send_status_description": "Mostrar estilos de patinaje, spinners y herramientas técnicas mientras un mensaje está enviando. Cuando está apagado, se muestra un solo cheque de muda hasta que el envío toma unos segundos.",
+ "message_timestamp_grouping": "Agrupar marcas de tiempo",
+ "message_timestamp_grouping_description": "Si está activo, el chat muestra cabeceras de fecha y agrupa la hora en una burbuja por bloque. Si está desactivado, cada mensaje muestra su hora y se ocultan las burbujas de fecha.",
"search_settings": "Ajustes de búsqueda...",
"auto_resend": "Reembolso automático",
"retry_attachments": "Retry Attachments",
@@ -278,6 +295,13 @@
"blackhole_integration_description": "Identidades automáticamente de agujeros negros en la capa de transporte Reticulum al desterrar usuarios en MeshChatX.",
"announce_limits": "Anuncio Límites",
"announce_limits_description": "Limite cuántos anuncios se guardan en la base de datos por aspecto (antiguo eliminado primero) y cuántas cargas por solicitud de API. También tapa búsqueda y descargas de interfaz descubierto. Limpiar un campo numérico y guardar para restaurar los defectos.",
+ "announce_store_heading": "Guardar anuncios entrantes",
+ "announce_store_description": "Si está desactivado, no se escriben en la base de datos. Solo afecta al almacenamiento, no a la red ni a tus anuncios. Un nodo NomadNet local en esta máquina sigue apareciendo aunque NomadNet esté desactivado.",
+ "announce_store_lxmf": "LXMF (lxmf.delivery)",
+ "announce_store_lxst": "LXST telefonía (lxst.telephony)",
+ "announce_store_nomad": "Nodos NomadNet (nomadnetwork.node)",
+ "announce_store_prop": "Nodos de propagación (lxmf.propagation)",
+ "announce_store_git": "RNGit (git.repositories)",
"announce_max_stored_heading": "Max almacenado por aspecto (base de datos)",
"announce_fetch_limit_heading": "Tamaño predeterminado de la página (API)",
"announce_search_max_fetch": "Max anuncia búsqueda",
@@ -767,7 +791,11 @@
"pagination_page_of": "Pág. {current} de {total}",
"path_unknown": "desconocido",
"recovery": "Recuperación",
+ "recovery_complete": "Recuperación de la base de datos finalizada.",
+ "recovery_confirm": "¿Ejecutar recuperación de la base de datos? Se hará una comprobación de integridad completa y VACUUM. Puede tardar y la aplicación puede quedar sin respuesta un tiempo. No carga un archivo de copia de seguridad.",
"recovery_failed": "La recuperación falló",
+ "vacuum_complete": "VACUUM de la base de datos completado.",
+ "vacuum_failed": "No se pudo completar el VACUUM de la base de datos.",
"reveal_config_file": "Mostrar archivo",
"reveal_database_file": "Mostrar BD",
"reticulum_config": "Configuración de Reticulum",
@@ -810,6 +838,8 @@
"failed_reload": "¡Failed to reload Reticulum!",
"interface_not_found": "No se pudo encontrar la interfaz seleccionada para la edición.",
"discovery_settings_saved": "Ajustes de descubrimiento guardados",
+ "discovery_default_bootstrap_only": "Bootstrap-only por defecto para nuevo TCP saliente",
+ "discovery_default_bootstrap_only_hint": "Las nuevas interfaces TCP cliente (y conector backbone) usan bootstrap_only para que Reticulum las desactive al alcanzar autoconnect_discovered_interfaces.",
"failed_save_discovery": "Failed to save discovery settings",
"no_interfaces_found_config": "No se encontraron interfaces en el archivo de configuración seleccionado",
"failed_parse_config": "Failed to parse configuración file",
@@ -825,6 +855,9 @@
"community_presets_hidden_hint": "Los presets comunitarios están ocultos. Enséñales de nuevo aquí o en Ajustes.",
"community_presets_show_again": "Mostrar presets comunitarios",
"community_presets_empty": "No hay presets cargados. Recompilar el paquete o añadir public/community interfaces.json.",
+ "community_presets_refresh": "Actualizar presets comunitarios desde directory.rns.recipes",
+ "community_presets_refreshed": "Actualizados {count} preset(s) de interfaces comunitarias",
+ "community_presets_refresh_failed": "No se pudieron actualizar los presets comunitarios",
"find_more_nodes": "Encontrar más nodos",
"quick_import": "Importación rápida",
"quick_import_paste_hint": "Paste crudo config",
@@ -1107,6 +1140,19 @@
"folders_imported": "Carpetas importadas",
"failed_import_folders": "Failed to import folders",
"failed_read_clipboard": "Failed to read from clipboard",
+ "clipboard_read_requires_secure_context": "Clipboard read needs a secure page (https or http://127.0.0.1). Using http://0.0.0.0 or another non-local HTTP origin blocks the Clipboard API—open the app on 127.0.0.1 or https, or paste with Ctrl+V.",
+ "clipboard_write_unavailable": "Could not copy automatically. Open on https or http://127.0.0.1, or select the text and copy manually.",
+ "oversized_body_notice": "Este mensaje es demasiado grande para mostrarlo aquí ({count} caracteres). Copie el texto completo para leerlo o editarlo en otra aplicación.",
+ "oversized_body_copy": "Copiar texto completo",
+ "oversized_body_copied": "Texto completo del mensaje copiado",
+ "date_divider_today": "Hoy",
+ "date_divider_yesterday": "Ayer",
+ "raw_path_interface_at_send": "Interfaz de ruta (al registrar)",
+ "raw_path_hops_at_send": "Saltos de ruta (al registrar)",
+ "raw_path_value_unknown": "Desconocido",
+ "raw_path_finding_measure": "Pathfinding al enviar (saliente)",
+ "raw_path_row_hash_rnpath": "Hash de tabla de rutas (rnpath)",
+ "raw_path_row_hash_rnpath_hint": "Igual que el hash de destino que Reticulum usó para esta ruta; búscalo en la tabla de rutas de rnpath.",
"copy_message": "Copiar mensaje",
"message_copied": "Mensaje copiado",
"failed_copy_message": "No se pudo copiar el mensaje",
@@ -1442,6 +1488,7 @@
"utilities": "Utilidades",
"power_tools": "Utilidades",
"diagnostics_description": "Utilidades de malla y Reticulum en un mismo sitio: alcance, rutas, transferencia de archivos, traducción, documentación y ayudas de hardware. Abra una fila para la herramienta completa.",
+ "back_to_tools": "Volver a herramientas",
"ping": {
"title": "Ping",
"description": "Medir el tiempo de ida y vuelta a un destino que acepta ping."
@@ -2367,6 +2414,8 @@
"mode_change_later": "Puede cambiar la configuración de conexión en cualquier momento desde la configuración de Reticulum.",
"bootstrap_title": "Pick Bootstrap Nodes",
"bootstrap_desc": "Los nodos de bootstrap dan a descubrimiento un punto de partida. Seleccione uno o más, luego continúe.",
+ "bootstrap_only_label": "Bootstrap-only en interfaces añadidas",
+ "bootstrap_only_hint": "Cada interfaz añadida queda como bootstrap_only (temporal hasta autoconnect). Puede cambiar el valor por defecto en Interfaces.",
"bootstrap_desc_page": "Los nodos de Bootstrap dan a Reticulum un punto de partida para que pueda descubrir el resto de la red. Seleccione uno o más de los nodos descubiertos o comunitarios a continuación.",
"bootstrap_discovered": "Nodos descubiertos",
"bootstrap_community": "Nodos comunitarios",
diff --git a/meshchatx/src/frontend/locales/fr.json b/meshchatx/src/frontend/locales/fr.json
index 7af34308..fa47f28e 100644
--- a/meshchatx/src/frontend/locales/fr.json
+++ b/meshchatx/src/frontend/locales/fr.json
@@ -114,6 +114,14 @@
"show_community_interfaces": "Afficher les interfaces communautaires",
"community_interfaces_description": "Préréglages entretenus par la communauté de surface tout en ajoutant de nouvelles interfaces.",
"reliability": "Fiabilité",
+ "lxmf_settings_eyebrow": "LXMF",
+ "privacy_eyebrow": "Confidentialité",
+ "privacy_data_title": "Données et appareil",
+ "privacy_data_description": "Historique local, télémétrie vers des pairs de confiance. La suppression n'affecte que cet appareil.",
+ "privacy_data": "Données et appareil",
+ "privacy_subsection_device": "Cet appareil",
+ "privacy_subsection_telemetry": "Télémétrie mesh",
+ "settings_map_eyebrow": "Carte",
"messages_description": "Configurez comment MeshChat gère les échecs de livraison des messages. Contrôler le comportement de réessayer automatique, la retransmission des attaches et les mécanismes de repli pour assurer la livraison fiable des messages sur le réseau de mailles.",
"auto_resend_title": "Auto renverra quand pair annoncera",
"auto_resend_description": "Les messages échoués réessayent automatiquement une fois la destination retransmise.",
@@ -125,7 +133,14 @@
"inbound_stamps_required_description": "Lorsqu'ils sont éteints, les messages LXMF ne nécessitent pas de tampons. Lors de l'activation, fixez le coût du timbre en dessous (plus élevé signifie plus de travail pour les expéditeurs).",
"inbound_stamp_cost": "Coût du timbre de message entrant",
"inbound_stamp_description": "Proof-of-work difficulté pour les messages de livraison directe lorsque les timbres entrants sont requis. Gamme: 1-254. Par défaut : 8.",
- "browse_nodes": "Parcourir les nœuds",
+ "local_message_auto_delete_title": "Supprimer les anciens messages sur cet appareil",
+ "local_message_auto_delete_description": "Supprime les messages de la base locale après l'ancienneté choisie. Concerne uniquement cet appareil. Les autres gardent leurs copies. Aucune suppression n'est envoyée sur le réseau.",
+ "local_message_auto_delete_age": "Supprimer les messages plus anciens que",
+ "local_message_auto_delete_unit_aria": "Unité de durée de conservation",
+ "local_message_auto_delete_unit_days": "jours",
+ "local_message_auto_delete_unit_months": "mois (30 jours chacun)",
+ "local_message_auto_delete_month_note": "Un mois compte comme 30 jours. Désactivé par défaut.",
+ "browse_nodes": "Parcourir les n\u0153uds",
"propagation_nodes_description": "Gardez les conversations qui circulent même lorsque les pairs sont hors ligne.",
"nodes_info_1": "Les nœuds de propagation maintiennent les messages en toute sécurité jusqu'à ce que les destinataires se synchronisent à nouveau.",
"nodes_info_2": "Des nœuds s'unissent pour distribuer des charges utiles chiffrées.",
@@ -195,6 +210,8 @@
"message_icon_size": "Taille de l'icône",
"detailed_outbound_send_status": "État d'envoi détaillé",
"detailed_outbound_send_status_description": "Afficher le style de recherche de chemin, spinners, et outils techniques pendant qu'un message est envoyé. Lorsqu'il est éteint, une seule vérification est affichée jusqu'à ce que l'envoi prenne quelques secondes.",
+ "message_timestamp_grouping": "Regrouper les horodatages",
+ "message_timestamp_grouping_description": "Si activé, le chat affiche des en-têtes de date et regroupe l'heure sur une bulle par bloc. Si désactivé, chaque message affiche l'heure et les bulles de date sont masquées.",
"search_settings": "Paramètres de recherche...",
"auto_resend": "Resend automatique",
"retry_attachments": "Réessayer les pièces jointes",
@@ -278,6 +295,13 @@
"blackhole_integration_description": "Automatiquement des identités de trou noir à la couche de transport de Reticulum lors du bannissement des utilisateurs dans MeshChatX.",
"announce_limits": "Annonce des limites",
"announce_limits_description": "Limiter le nombre d'annonces conservées dans la base de données par aspect (le plus ancien a été enlevé en premier) et le nombre de chargements par demande d'API. Aussi plafonne la recherche et l'interface découverte charges utiles. Effacer un champ numérique et enregistrer pour restaurer les valeurs par défaut.",
+ "announce_store_heading": "Enregistrer les annonces entrantes",
+ "announce_store_description": "Désactivé, les annonces reçues de ce type ne sont pas écrites en base. Cela ne concerne que le stockage, pas le réseau ni vos annonces. Un nœud NomadNet hébergé localement reste listé si NomadNet est désactivé.",
+ "announce_store_lxmf": "LXMF (lxmf.delivery)",
+ "announce_store_lxst": "LXST téléphonie (lxst.telephony)",
+ "announce_store_nomad": "Nœuds NomadNet (nomadnetwork.node)",
+ "announce_store_prop": "Nœuds de propagation (lxmf.propagation)",
+ "announce_store_git": "RNGit (git.repositories)",
"announce_max_stored_heading": "Max stocké par aspect (base de données)",
"announce_fetch_limit_heading": "Taille par défaut de la page (API)",
"announce_search_max_fetch": "Max annonce une recherche",
@@ -767,7 +791,11 @@
"pagination_page_of": "Page {current} sur {total}",
"path_unknown": "inconnu",
"recovery": "Récupération",
+ "recovery_complete": "Récupération de la base de données terminée.",
+ "recovery_confirm": "Lancer la récupération de la base de données ? Un contrôle d’intégrité complet et un VACUUM seront exécutés. Cela peut prendre du temps et l’application peut sembler bloquée. Cela ne charge pas un fichier de sauvegarde.",
"recovery_failed": "Échec de la récupération",
+ "vacuum_complete": "Nettoyage (VACUUM) de la base terminé.",
+ "vacuum_failed": "Impossible de nettoyer la base de données.",
"reveal_config_file": "Afficher le fichier",
"reveal_database_file": "Afficher la base",
"reticulum_config": "Configuration Reticulum",
@@ -810,6 +838,8 @@
"failed_reload": "Impossible de recharger Reticulum !",
"interface_not_found": "L'interface sélectionnée pour l'édition n'a pas pu être trouvée.",
"discovery_settings_saved": "Paramètres de découverte enregistrés",
+ "discovery_default_bootstrap_only": "Bootstrap-only par défaut pour nouveau TCP sortant",
+ "discovery_default_bootstrap_only_hint": "Les nouvelles interfaces client TCP (et connecteur backbone) reçoivent bootstrap_only pour que Reticulum les détache une fois autoconnect_discovered_interfaces atteint.",
"failed_save_discovery": "Impossible d'enregistrer les paramètres de la découverte",
"no_interfaces_found_config": "Aucune interface n'a été trouvée dans le fichier de configuration sélectionné",
"failed_parse_config": "Impossible d'analyser le fichier de configuration",
@@ -825,6 +855,9 @@
"community_presets_hidden_hint": "Les préréglages communautaires sont cachés. Montrez-les ici ou dans Paramètres.",
"community_presets_show_again": "Afficher les préréglages communautaires",
"community_presets_empty": "Pas de presets chargés. Reconstruisez le paquet ou ajoutez public/community interfaces.json.",
+ "community_presets_refresh": "Actualiser les préréglages communautaires depuis directory.rns.recipes",
+ "community_presets_refreshed": "Mis à jour : {count} préréglage(s) d'interfaces communautaires",
+ "community_presets_refresh_failed": "Impossible d'actualiser les préréglages communautaires",
"find_more_nodes": "Trouver d'autres nœuds",
"quick_import": "Importer rapidement",
"quick_import_paste_hint": "Coller la configuration brute",
@@ -1107,6 +1140,19 @@
"folders_imported": "Dossiers importés",
"failed_import_folders": "Impossible d'importer des dossiers",
"failed_read_clipboard": "Impossible de lire depuis le presse-papiers",
+ "clipboard_read_requires_secure_context": "La lecture du presse-papiers nécessite une page sécurisée (https ou http://127.0.0.1). Avec http://0.0.0.0 l’API Clipboard est bloquée—utilisez 127.0.0.1 ou https, ou collez avec Ctrl+V.",
+ "clipboard_write_unavailable": "Copie automatique impossible. Utilisez https ou http://127.0.0.1, ou copiez la sélection manuellement.",
+ "oversized_body_notice": "Ce message est trop volumineux pour s'afficher ici ({count} caractères). Copiez le texte intégral pour le lire ou le modifier ailleurs.",
+ "oversized_body_copy": "Copier le texte intégral",
+ "oversized_body_copied": "Texte intégral du message copié",
+ "date_divider_today": "Aujourd'hui",
+ "date_divider_yesterday": "Hier",
+ "raw_path_interface_at_send": "Interface du chemin (enregistrée)",
+ "raw_path_hops_at_send": "Sauts du chemin (enregistrés)",
+ "raw_path_value_unknown": "Inconnu",
+ "raw_path_finding_measure": "Recherche de chemin à l'envoi (sortant)",
+ "raw_path_row_hash_rnpath": "Hash table des chemins (rnpath)",
+ "raw_path_row_hash_rnpath_hint": "Identique au hash de destination utilisé par Reticulum pour cette route ; recherchez-le dans la table rnpath.",
"copy_message": "Copier le message",
"message_copied": "Message copié",
"failed_copy_message": "Impossible de copier le message",
@@ -1442,6 +1488,7 @@
"utilities": "Services publics",
"power_tools": "Services publics",
"diagnostics_description": "Utilitaires mesh et Reticulum au même endroit : joignabilité, chemins, transfert de fichiers, traduction, documentation et aides matérielles. Ouvrez une ligne pour l'outil complet.",
+ "back_to_tools": "Retour aux outils",
"ping": {
"title": "Ping",
"description": "Mesurer le temps aller-retour vers une destination qui accepte ping."
@@ -2367,6 +2414,8 @@
"mode_change_later": "Vous pouvez modifier les paramètres de connexion à tout moment à partir des paramètres de Reticulum.",
"bootstrap_title": "Choisir des nœuds de bootstrap",
"bootstrap_desc": "Les nœuds de bootstrap donnent un point de départ à la découverte. Sélectionnez un ou plusieurs, puis continuez.",
+ "bootstrap_only_label": "Bootstrap-only pour les interfaces ajoutées",
+ "bootstrap_only_hint": "Chaque interface ajoutée est marquée bootstrap_only (temporaire jusqu'aux auto-connexions). Modifiez la valeur par défaut plus tard dans Interfaces.",
"bootstrap_desc_page": "Les nœuds Bootstrap donnent à Reticulum un point de départ pour qu'il puisse découvrir le reste du réseau. Sélectionnez un ou plusieurs nœuds découverts ou communautaires ci-dessous.",
"bootstrap_discovered": "Noeuds découverts",
"bootstrap_community": "Nœuds communautaires",
diff --git a/meshchatx/src/frontend/locales/it.json b/meshchatx/src/frontend/locales/it.json
index 2ba6c71d..83bcc7d4 100644
--- a/meshchatx/src/frontend/locales/it.json
+++ b/meshchatx/src/frontend/locales/it.json
@@ -114,6 +114,14 @@
"show_community_interfaces": "Mostra Interfacce della Comunità",
"community_interfaces_description": "Mostra i preset mantenuti dalla comunità quando aggiungi nuove interfacce.",
"reliability": "Affidabilità",
+ "lxmf_settings_eyebrow": "LXMF",
+ "privacy_eyebrow": "Privacy",
+ "privacy_data_title": "Dati e dispositivo",
+ "privacy_data_description": "Cronologia locale, telemetria verso peer attendibili. L'eliminazione riguarda solo questo dispositivo.",
+ "privacy_data": "Dati e dispositivo",
+ "privacy_subsection_device": "Questo dispositivo",
+ "privacy_subsection_telemetry": "Telemetria mesh",
+ "settings_map_eyebrow": "Mappa",
"messages_description": "Configura come MeshChat gestisce i fallimenti di consegna dei messaggi. Controlla il comportamento dei tentativi automatici, la ritrasmissione degli allegati e i meccanismi di fallback per garantire una consegna affidabile dei messaggi nella rete mesh.",
"auto_resend_title": "Invia automaticamente quando il peer annuncia",
"auto_resend_description": "I messaggi falliti vengono riprovati automaticamente quando la destinazione trasmette di nuovo.",
@@ -125,6 +133,13 @@
"inbound_stamps_required_description": "Se disattivato, i messaggi LXMF diretti verso di te non richiedono francobolli proof-of-work. Se attivato, imposta il costo sotto (più alto = più lavoro per i mittenti).",
"inbound_stamp_cost": "Costo Francobollo Messaggio in Entrata",
"inbound_stamp_description": "Difficoltà proof-of-work per la consegna diretta quando i francobolli in entrata sono attivi. Intervallo: 1-254. Predefinito: 8.",
+ "local_message_auto_delete_title": "Elimina messaggi vecchi su questo dispositivo",
+ "local_message_auto_delete_description": "Rimuove i messaggi dal database locale dopo l'età impostata. Vale solo per questo dispositivo. Gli altri tengono le proprie copie. Nessuna eliminazione viene inviata alla rete.",
+ "local_message_auto_delete_age": "Elimina messaggi più vecchi di",
+ "local_message_auto_delete_unit_aria": "Unità di tempo per la conservazione",
+ "local_message_auto_delete_unit_days": "giorni",
+ "local_message_auto_delete_unit_months": "mesi (30 giorni ciascuno)",
+ "local_message_auto_delete_month_note": "Ogni mese è contato come 30 giorni. Disattivato per impostazione predefinita.",
"browse_nodes": "Sfoglia Nodi",
"propagation_nodes_description": "Mantieni il flusso delle conversazioni anche quando i peer sono offline.",
"nodes_info_1": "I nodi di propagazione conservano i messaggi in modo sicuro fino a quando i destinatari non si sincronizzano di nuovo.",
@@ -195,6 +210,8 @@
"message_icon_size": "Dimensione icona",
"detailed_outbound_send_status": "Stato invio in uscita dettagliato",
"detailed_outbound_send_status_description": "Mostra stile percorso, spinner e tooltip tecnici durante l'invio. Se disattivato, viene mostrata una sola spunta attenuata fino a escalation dopo alcuni secondi.",
+ "message_timestamp_grouping": "Raggruppa timestamp messaggi",
+ "message_timestamp_grouping_description": "Se attivo, la chat mostra intestazioni data e raggruppa l'ora su un fumetto per blocco. Se disattivo, ogni messaggio mostra l'ora e le bolle data sono nascoste.",
"search_settings": "Cerca impostazioni...",
"auto_resend": "Invio Automatico",
"retry_attachments": "Riprova Allegati",
@@ -278,6 +295,13 @@
"blackhole_integration_description": "Metti automaticamente in blackhole le identità a livello di trasporto Reticulum quando esili gli utenti in MeshChatX.",
"announce_limits": "Limiti annunci",
"announce_limits_description": "Limita quanti annunci restano nel database per aspetto (si eliminano i più vecchi) e quanti vengono caricati per richiesta API. Limita anche ricerca e interfacce scoperte. Svuota un campo e salva per i default.",
+ "announce_store_heading": "Memorizza annunci in arrivo",
+ "announce_store_description": "Se disattivato, gli annunci di quel tipo non vengono salvati nel database. Non influisce su rete o annunci propri. Un nodo pagina NomadNet locale resta in elenco anche con NomadNet disattivato.",
+ "announce_store_lxmf": "LXMF (lxmf.delivery)",
+ "announce_store_lxst": "LXST telefonia (lxst.telephony)",
+ "announce_store_nomad": "Nodi NomadNet (nomadnetwork.node)",
+ "announce_store_prop": "Nodi di propagazione (lxmf.propagation)",
+ "announce_store_git": "RNGit (git.repositories)",
"announce_max_stored_heading": "Massimo salvato per aspetto (database)",
"announce_fetch_limit_heading": "Dimensione pagina predefinita (API)",
"announce_search_max_fetch": "Massimo annunci per ricerca",
@@ -819,7 +843,11 @@
"pagination_page_of": "Pag. {current} di {total}",
"path_unknown": "sconosciuto",
"recovery": "Ripristino",
+ "recovery_complete": "Ripristino del database completato.",
+ "recovery_confirm": "Eseguire il ripristino del database? Verranno eseguiti un controllo di integrità completo e VACUUM. Può richiedere tempo e l’app potrebbe non rispondere per un po’. Non carica un file di backup.",
"recovery_failed": "Ripristino non riuscito",
+ "vacuum_complete": "Vacuum del database completato.",
+ "vacuum_failed": "Impossibile eseguire il vacuum del database.",
"reveal_config_file": "Mostra file",
"reveal_database_file": "Mostra DB",
"reticulum_config": "Configurazione Reticulum",
@@ -862,6 +890,8 @@
"failed_reload": "Impossibile ricaricare Reticulum!",
"interface_not_found": "L'interfaccia selezionata per la modifica non è stata trovata.",
"discovery_settings_saved": "Impostazioni di scoperta salvate",
+ "discovery_default_bootstrap_only": "Predefinito bootstrap-only per nuovo TCP in uscita",
+ "discovery_default_bootstrap_only_hint": "Le nuove interfacce TCP client (e connettore backbone) usano bootstrap_only così Reticulum può staccarle quando autoconnect_discovered_interfaces è soddisfatto.",
"failed_save_discovery": "Impossibile salvare le impostazioni di scoperta",
"no_interfaces_found_config": "Nessuna interfaccia trovata nel file di configurazione selezionato",
"failed_parse_config": "Impossibile analizzare il file di configurazione",
@@ -877,6 +907,9 @@
"community_presets_hidden_hint": "I preset community sono nascosti. Mostra di nuovo qui o in Impostazioni.",
"community_presets_show_again": "Mostra preset community",
"community_presets_empty": "Nessun preset. Ricostruisci il bundle o aggiungi public/community_interfaces.json.",
+ "community_presets_refresh": "Aggiorna i preset community da directory.rns.recipes",
+ "community_presets_refreshed": "Aggiornati {count} preset di interfacce community",
+ "community_presets_refresh_failed": "Impossibile aggiornare i preset community",
"find_more_nodes": "Trova altri nodi",
"quick_import": "Import rapido",
"quick_import_paste_hint": "Incolla config grezza",
@@ -1161,6 +1194,19 @@
"folders_imported": "Cartelle importate",
"failed_import_folders": "Impossibile importare le cartelle",
"failed_read_clipboard": "Impossibile leggere dagli appunti",
+ "clipboard_read_requires_secure_context": "La lettura degli appunti richiede una pagina sicura (https o http://127.0.0.1). Con http://0.0.0.0 l’API Clipboard è bloccata—usa 127.0.0.1 o https, oppure Incolla con Ctrl+V.",
+ "clipboard_write_unavailable": "Impossibile copiare automaticamente. Usa https o http://127.0.0.1, oppure copia manualmente la selezione.",
+ "oversized_body_notice": "Questo messaggio è troppo grande per essere mostrato qui ({count} caratteri). Copia il testo completo per leggerlo o modificarlo altrove.",
+ "oversized_body_copy": "Copia testo completo",
+ "oversized_body_copied": "Testo completo del messaggio copiato",
+ "date_divider_today": "Oggi",
+ "date_divider_yesterday": "Ieri",
+ "raw_path_interface_at_send": "Interfaccia percorso (registrata)",
+ "raw_path_hops_at_send": "Salti percorso (registrati)",
+ "raw_path_value_unknown": "Sconosciuto",
+ "raw_path_finding_measure": "Pathfinding all'invio (in uscita)",
+ "raw_path_row_hash_rnpath": "Hash tabella percorsi (rnpath)",
+ "raw_path_row_hash_rnpath_hint": "Uguale all'hash di destinazione usato da Reticulum per questa route; cercalo nella tabella percorsi rnpath.",
"copy_message": "Copia messaggio",
"message_copied": "Messaggio copiato",
"failed_copy_message": "Impossibile copiare il messaggio",
@@ -1494,6 +1540,7 @@
"utilities": "Utilità",
"power_tools": "Utilità",
"diagnostics_description": "Strumenti mesh e Reticulum in un unico posto: raggiungibilità, percorsi, trasferimento file, traduzione, documentazione e assistenza hardware. Apri una riga per lo strumento completo.",
+ "back_to_tools": "Torna agli strumenti",
"ping": {
"title": "Ping",
"description": "Misura il tempo di andata e ritorno verso una destinazione che accetta il ping."
@@ -2367,6 +2414,8 @@
"mode_change_later": "Puoi cambiare le impostazioni di connessione in qualsiasi momento dalle impostazioni Reticulum.",
"bootstrap_title": "Scegli nodi di bootstrap",
"bootstrap_desc": "I nodi di bootstrap danno alla scoperta un punto di partenza. Selezionane uno o più e continua.",
+ "bootstrap_only_label": "Bootstrap-only per le interfacce aggiunte",
+ "bootstrap_only_hint": "Ogni interfaccia aggiunta usa bootstrap_only (temporaneo fino a quando bastano le auto-connessioni). Modifica il predefinito in Interfacce.",
"bootstrap_desc_page": "I nodi di bootstrap danno a Reticulum un punto di partenza per scoprire il resto della rete. Selezionane uno o più tra i nodi scoperti o della comunità qui sotto.",
"bootstrap_discovered": "Nodi scoperti",
"bootstrap_community": "Nodi della comunità",
diff --git a/meshchatx/src/frontend/locales/nl.json b/meshchatx/src/frontend/locales/nl.json
index 2d1190bd..66a9c00a 100644
--- a/meshchatx/src/frontend/locales/nl.json
+++ b/meshchatx/src/frontend/locales/nl.json
@@ -114,6 +114,14 @@
"show_community_interfaces": "Community-interfaces tonen",
"community_interfaces_description": "Toon door de community onderhouden interface-presets bij het toevoegen van nieuwe interfaces.",
"reliability": "Betrouwbaarheid",
+ "lxmf_settings_eyebrow": "LXMF",
+ "privacy_eyebrow": "Privacy",
+ "privacy_data_title": "Data en apparaat",
+ "privacy_data_description": "Lokale berichtengeschiedenis, telemetrie naar vertrouwde peers. Verwijderen geldt alleen voor dit apparaat.",
+ "privacy_data": "Data en apparaat",
+ "privacy_subsection_device": "Dit apparaat",
+ "privacy_subsection_telemetry": "Mesh-telemetrie",
+ "settings_map_eyebrow": "Kaart",
"messages_description": "Configureer hoe MeshChat omgaat met foutieve berichtlevering. Controle automatische retry gedrag, bijlage doorgifte, en terugvalmechanismen om betrouwbare bericht levering over het mesh netwerk te garanderen.",
"auto_resend_title": "Automatisch opnieuw verzenden wanneer peer aankondigt",
"auto_resend_description": "Mislukte berichten automatisch opnieuw proberen zodra de bestemming opnieuw wordt uitgezonden.",
@@ -125,6 +133,13 @@
"inbound_stamps_required_description": "Wanneer uit, directe LXMF berichten aan u hebben geen proof-of-work stempels nodig. Stel de postzegelkosten hieronder in (hoger betekent meer werk voor afzenders).",
"inbound_stamp_cost": "Inkomende postzegelkosten",
"inbound_stamp_description": "Proof-of-work moeilijkheid voor directe levering berichten wanneer inkomende stempels zijn vereist. Bereik: 1-254. Standaard: 8.",
+ "local_message_auto_delete_title": "Oude berichten op dit apparaat verwijderen",
+ "local_message_auto_delete_description": "Verwijdert berichten uit de lokale database na de ingestelde leeftijd. Geldt alleen voor dit apparaat. Anderen houden hun eigen kopieën. Er gaat geen verwijdering de netwerk op.",
+ "local_message_auto_delete_age": "Berichten verwijderen die ouder zijn dan",
+ "local_message_auto_delete_unit_aria": "Tijdsduur voor bewaring",
+ "local_message_auto_delete_unit_days": "dagen",
+ "local_message_auto_delete_unit_months": "maanden (elk 30 dagen)",
+ "local_message_auto_delete_month_note": "Maanden tellen als 30 dagen. Standaard uit.",
"browse_nodes": "Knoppen doorbladeren",
"propagation_nodes_description": "Blijf gesprekken stromen, zelfs als collega's offline zijn.",
"nodes_info_1": "Propagatieknooppunten houden berichten veilig vast totdat ontvangers opnieuw synchroniseren.",
@@ -195,6 +210,8 @@
"message_icon_size": "Pictogramgrootte",
"detailed_outbound_send_status": "Gedetailleerde uitgaande verzendstatus",
"detailed_outbound_send_status_description": "Toon pathfinding styling, spinners en technische tooltips terwijl een bericht wordt verzonden. Wanneer uit, een enkele gedempte controle wordt getoond tot het verzenden duurt een paar seconden.",
+ "message_timestamp_grouping": "Tijdstempels groeperen",
+ "message_timestamp_grouping_description": "Indien aan toont de chat datumkoppen en één tijd per reeks bellen. Indien uit toont elk bericht de tijd en verdwijnen datumbellen.",
"search_settings": "Zoekinstellingen...",
"auto_resend": "Automatisch opnieuw verzenden",
"retry_attachments": "Bijlagen opnieuw proberen",
@@ -278,6 +295,13 @@
"blackhole_integration_description": "Automatisch zwarte gat identiteiten op de Reticulum transport laag bij het verbannen van gebruikers in MeshChatX.",
"announce_limits": "Grenzen aankondigen",
"announce_limits_description": "Beperk hoeveel aankondigingen worden bewaard in de database per aspect (oudste verwijderd eerst) en hoeveel lading per API verzoek. Ook caps zoeken en ontdekt-interface payloads. Een numeriek veld wissen en opslaan om standaardwaarden te herstellen.",
+ "announce_store_heading": "Inkomende aankondigingen opslaan",
+ "announce_store_description": "Uit: ontvangen aankondigingen van dat type worden niet in de database geschreven. Alleen opslag, niet het netwerk of je eigen aankondigingen. Een lokaal NomadNet-paginaknooppunt blijft zichtbaar als NomadNet-opslag uit staat.",
+ "announce_store_lxmf": "LXMF (lxmf.delivery)",
+ "announce_store_lxst": "LXST-telefonie (lxst.telephony)",
+ "announce_store_nomad": "NomadNet-knopen (nomadnetwork.node)",
+ "announce_store_prop": "Propagatieknoten (lxmf.propagation)",
+ "announce_store_git": "RNGit (git.repositories)",
"announce_max_stored_heading": "Max opgeslagen per aspect (database)",
"announce_fetch_limit_heading": "Standaard paginagrootte (API)",
"announce_search_max_fetch": "Max kondigt aan om te zoeken",
@@ -767,7 +791,11 @@
"pagination_page_of": "Pagina {current} van {total}",
"path_unknown": "onbekend",
"recovery": "Herstel",
+ "recovery_complete": "Databaseherstel voltooid.",
+ "recovery_confirm": "Databaseherstel uitvoeren? Er wordt een volledige integriteitscontrole en VACUUM uitgevoerd. Dit kan even duren en de app kan tijdelijk niet reageren. Er wordt geen back-upbestand geladen.",
"recovery_failed": "Herstel mislukt",
+ "vacuum_complete": "Database-VACUUM voltooid.",
+ "vacuum_failed": "VACUUM van de database is mislukt.",
"reveal_config_file": "Bestand tonen",
"reveal_database_file": "DB tonen",
"reticulum_config": "Reticulum-configuratie",
@@ -810,6 +838,8 @@
"failed_reload": "Herladen van Reticulum is mislukt!",
"interface_not_found": "De geselecteerde interface voor bewerken kon niet gevonden worden.",
"discovery_settings_saved": "Opgeslagen zoekinstellingen",
+ "discovery_default_bootstrap_only": "Standaard bootstrap-only voor nieuwe uitgaande TCP",
+ "discovery_default_bootstrap_only_hint": "Nieuwe TCP-client- (en backbone-connector)interfaces krijgen bootstrap_only zodat Reticulum ze loskoppelt zodra autoconnect_discovered_interfaces is bereikt.",
"failed_save_discovery": "Kon ontdekkingsinstellingen niet opslaan",
"no_interfaces_found_config": "Er zijn geen interfaces gevonden in het geselecteerde configuratiebestand",
"failed_parse_config": "Ontleden van configuratiebestand mislukt",
@@ -825,6 +855,9 @@
"community_presets_hidden_hint": "Communautaire presets zijn verborgen. Laat ze hier of in Instellingen weer zien.",
"community_presets_show_again": "Community-voorinstellingen tonen",
"community_presets_empty": "Geen voorinstellingen geladen. De bundel opnieuw opbouwen of public/community interfaces.json toevoegen.",
+ "community_presets_refresh": "Community-voorinstellingen vernieuwen van directory.rns.recipes",
+ "community_presets_refreshed": "{count} community-interfacevoorinstelling(en) bijgewerkt",
+ "community_presets_refresh_failed": "Community-voorinstellingen konden niet worden vernieuwd",
"find_more_nodes": "Meer knooppunten zoeken",
"quick_import": "Snel importeren",
"quick_import_paste_hint": "Rauwe configuratie plakken",
@@ -1107,6 +1140,19 @@
"folders_imported": "Mappen geïmporteerd",
"failed_import_folders": "Kon mappen niet importeren",
"failed_read_clipboard": "Lezen van klembord is mislukt",
+ "clipboard_read_requires_secure_context": "Klembord lezen vereist een beveiligde pagina (https of http://127.0.0.1). Met http://0.0.0.0 blokkeert de browser de Clipboard-API—gebruik 127.0.0.1 of https, of plak met Ctrl+V.",
+ "clipboard_write_unavailable": "Automatisch kopiëren mislukt. Gebruik https of http://127.0.0.1, of kopieer handmatig.",
+ "oversized_body_notice": "Dit bericht is te groot om hier te tonen ({count} tekens). Kopieer de volledige tekst om die elders te lezen of te bewerken.",
+ "oversized_body_copy": "Volledige tekst kopiëren",
+ "oversized_body_copied": "Volledige berichttekst gekopieerd",
+ "date_divider_today": "Vandaag",
+ "date_divider_yesterday": "Gisteren",
+ "raw_path_interface_at_send": "Pad-interface (opgeslagen)",
+ "raw_path_hops_at_send": "Pad-hops (opgeslagen)",
+ "raw_path_value_unknown": "Onbekend",
+ "raw_path_finding_measure": "Pathfinding bij verzenden (uitgaand)",
+ "raw_path_row_hash_rnpath": "Padtabel-hash (rnpath)",
+ "raw_path_row_hash_rnpath_hint": "Zelfde als de bestemmings-hash die Reticulum voor deze route gebruikte; zoek in de rnpath-padtabel.",
"copy_message": "Bericht kopiëren",
"message_copied": "Bericht gekopieerd",
"failed_copy_message": "Bericht kon niet worden gekopieerd",
@@ -1442,6 +1488,7 @@
"utilities": "Hulpmiddelen",
"power_tools": "Hulpmiddelen",
"diagnostics_description": "Mesh- en Reticulumhulpprogramma's op één plek: bereikbaarheid, paden, bestandsoverdracht, vertaling, documentatie en hardwarehulpen. Open een rij voor de volledige tool.",
+ "back_to_tools": "Terug naar gereedschap",
"ping": {
"title": "Ping",
"description": "Meet de rondreistijd naar een bestemming die ping accepteert."
@@ -2367,6 +2414,8 @@
"mode_change_later": "U kunt de verbindingsinstellingen op elk moment wijzigen vanuit de instellingen van Reticulum.",
"bootstrap_title": "Kies Bootstrap-nodes",
"bootstrap_desc": "Bootstrap knooppunten geven ontdekking een startpunt. Selecteer één of meer, ga dan verder.",
+ "bootstrap_only_label": "Bootstrap-only voor toegevoegde interfaces",
+ "bootstrap_only_hint": "Elke toegevoegde interface krijgt bootstrap_only (tijdelijk tot autoconnect). Standaard later wijzigen onder Interfaces.",
"bootstrap_desc_page": "Bootstrapknooppunten geven Reticulum een startpunt zodat het de rest van het netwerk kan ontdekken. Selecteer een of meer van ontdekte of community knooppunten hieronder.",
"bootstrap_discovered": "Ontdekt nodes",
"bootstrap_community": "Community Nodes",
diff --git a/meshchatx/src/frontend/locales/ru.json b/meshchatx/src/frontend/locales/ru.json
index 2e1290ad..5a9f9c56 100644
--- a/meshchatx/src/frontend/locales/ru.json
+++ b/meshchatx/src/frontend/locales/ru.json
@@ -108,6 +108,14 @@
"show_community_interfaces": "Показывать интерфейсы сообщества",
"community_interfaces_description": "Показывать предустановки, поддерживаемые сообществом, при добавлении новых интерфейсов.",
"reliability": "Надежность",
+ "lxmf_settings_eyebrow": "LXMF",
+ "privacy_eyebrow": "Конфиденциальность",
+ "privacy_data_title": "Данные и устройство",
+ "privacy_data_description": "Локальная история, телеметрия доверенным узлам. Удаление касается только этого устройства.",
+ "privacy_data": "Данные и устройство",
+ "privacy_subsection_device": "Это устройство",
+ "privacy_subsection_telemetry": "Телеметрия mesh",
+ "settings_map_eyebrow": "Карта",
"messages_description": "Настройте, как MeshChat повторяет или эскалирует неудачные доставки. Контролируйте автоматический повтор, пересылку вложений и механизмы отката для обеспечения надежной доставки сообщений в сети mesh.",
"auto_resend_title": "Автоповтор при анонсе узла",
"auto_resend_description": "Неудачные сообщения будут автоматически отправлены повторно, как только получатель снова выйдет в сеть.",
@@ -119,6 +127,13 @@
"inbound_stamps_required_description": "Если выключено, прямые LXMF-сообщения к вам не требуют штампов Proof-of-Work. Если включено, задайте стоимость ниже (выше — больше работы для отправителей).",
"inbound_stamp_cost": "Стоимость входящего штампа",
"inbound_stamp_description": "Сложность Proof-of-Work для прямой доставки, когда входящие штампы включены. Диапазон: 1-254. По умолчанию: 8.",
+ "local_message_auto_delete_title": "Удалять старые сообщения на этом устройстве",
+ "local_message_auto_delete_description": "Удаляет сообщения из локальной базы после заданного возраста. Только на этом устройстве. У других остаются свои копии. В сеть команда на удаление не отправляется.",
+ "local_message_auto_delete_age": "Удалять сообщения старше",
+ "local_message_auto_delete_unit_aria": "Единица времени хранения",
+ "local_message_auto_delete_unit_days": "дней",
+ "local_message_auto_delete_unit_months": "месяцев (по 30 дней)",
+ "local_message_auto_delete_month_note": "Месяц считается как 30 дней. По умолчанию выключено.",
"browse_nodes": "Список узлов",
"propagation_nodes_description": "Поддерживайте общение, даже когда узлы находятся в офлайне.",
"nodes_info_1": "Узлы ретрансляции надежно хранят сообщения до тех пор, пока получатели снова не синхронизируются.",
@@ -192,6 +207,8 @@
"message_icon_size": "Размер иконки",
"detailed_outbound_send_status": "Подробный статус исходящей отправки",
"detailed_outbound_send_status_description": "Показывать поиск пути, спиннеры и технические подсказки при отправке. Если выключено — одна приглушённая галочка до эскалации через несколько секунд.",
+ "message_timestamp_grouping": "Группировать время сообщений",
+ "message_timestamp_grouping_description": "Если включено, чат показывает заголовки дат и группирует время на одном пузыре за серию. Если выключено, у каждого сообщения своя метка времени, заголовки дат скрыты.",
"community_interfaces": "Сообщества",
"preferred_node": "Предпочитаемый узел",
"local_node": "Локальный узел",
@@ -271,6 +288,13 @@
"blackhole_integration_description": "Автоматически блокировать (blackhole) личности на транспортном уровне Reticulum при изгнании пользователей в MeshChatX.",
"announce_limits": "Лимиты объявлений",
"announce_limits_description": "Ограничение числа объявлений в базе по аспекту (удаляются самые старые) и сколько загружается за запрос API. Также лимит поиска и списка обнаруженных интерфейсов. Очистите поле и сохраните для значений по умолчанию.",
+ "announce_store_heading": "Сохранять входящие объявления",
+ "announce_store_description": "Выкл.: принятые объявления этого типа не пишутся в базу. Касается только хранения, не сети и не ваших объявлений. Локальная NomadNet-страница остаётся в списке, даже если хранение NomadNet выключено.",
+ "announce_store_lxmf": "LXMF (lxmf.delivery)",
+ "announce_store_lxst": "LXST телефония (lxst.telephony)",
+ "announce_store_nomad": "Узлы NomadNet (nomadnetwork.node)",
+ "announce_store_prop": "Узлы рассылки (lxmf.propagation)",
+ "announce_store_git": "RNGit (git.repositories)",
"announce_max_stored_heading": "Макс. в базе на аспект",
"announce_fetch_limit_heading": "Размер страницы по умолчанию (API)",
"announce_search_max_fetch": "Макс. объявлений для поиска",
@@ -819,7 +843,11 @@
"pagination_page_of": "Стр. {current} из {total}",
"path_unknown": "неизвестно",
"recovery": "Восстановление",
+ "recovery_complete": "Восстановление базы данных завершено.",
+ "recovery_confirm": "Запустить восстановление базы данных? Будет полная проверка целостности и VACUUM. Это может занять время, приложение может не отвечать. Файл резервной копии не подставляется.",
"recovery_failed": "Восстановление не удалось",
+ "vacuum_complete": "Очистка базы данных (VACUUM) завершена.",
+ "vacuum_failed": "Не удалось выполнить VACUUM базы данных.",
"reveal_config_file": "Показать файл",
"reveal_database_file": "Показать БД",
"reticulum_config": "Конфигурация Reticulum",
@@ -862,6 +890,8 @@
"failed_reload": "Failed to reload Reticulum!",
"interface_not_found": "The selected interface for editing could not be found.",
"discovery_settings_saved": "Discovery settings saved",
+ "discovery_default_bootstrap_only": "По умолчанию только bootstrap для нового исходящего TCP",
+ "discovery_default_bootstrap_only_hint": "Новые TCP-клиент и backbone-коннектор получают bootstrap_only, чтобы Reticulum отключил их при достижении autoconnect_discovered_interfaces.",
"failed_save_discovery": "Failed to save discovery settings",
"no_interfaces_found_config": "No interfaces were found in the selected configuration file",
"failed_parse_config": "Failed to parse configuration file",
@@ -877,6 +907,9 @@
"community_presets_hidden_hint": "Пресеты сообщества скрыты. Показать снова здесь или в настройках.",
"community_presets_show_again": "Показать пресеты сообщества",
"community_presets_empty": "Пресеты не загружены. Пересоберите bundle или добавьте public/community_interfaces.json.",
+ "community_presets_refresh": "Обновить пресеты сообщества с directory.rns.recipes",
+ "community_presets_refreshed": "Обновлено пресетов интерфейсов сообщества: {count}",
+ "community_presets_refresh_failed": "Не удалось обновить пресеты сообщества",
"find_more_nodes": "Найти узлы",
"quick_import": "Быстрый импорт",
"quick_import_paste_hint": "Вставьте сырую конфигурацию",
@@ -1161,6 +1194,19 @@
"folders_imported": "Folders imported",
"failed_import_folders": "Failed to import folders",
"failed_read_clipboard": "Failed to read from clipboard",
+ "clipboard_read_requires_secure_context": "Clipboard read needs a secure page (https or http://127.0.0.1). Using http://0.0.0.0 or another non-local HTTP origin blocks the Clipboard API—open the app on 127.0.0.1 or https, or paste with Ctrl+V.",
+ "clipboard_write_unavailable": "Could not copy automatically. Open on https or http://127.0.0.1, or select the text and copy manually.",
+ "oversized_body_notice": "Сообщение слишком длинное для отображения здесь ({count} символов). Скопируйте полный текст, чтобы прочитать или изменить его в другом приложении.",
+ "oversized_body_copy": "Копировать полный текст",
+ "oversized_body_copied": "Полный текст сообщения скопирован",
+ "date_divider_today": "Сегодня",
+ "date_divider_yesterday": "Вчера",
+ "raw_path_interface_at_send": "Интерфейс пути (при записи)",
+ "raw_path_hops_at_send": "Прыжки пути (при записи)",
+ "raw_path_value_unknown": "Неизвестно",
+ "raw_path_finding_measure": "Поиск пути при отправке (исходящее)",
+ "raw_path_row_hash_rnpath": "Хэш строки таблицы путей (rnpath)",
+ "raw_path_row_hash_rnpath_hint": "Тот же хэш назначения, который Reticulum использовал для маршрута; ищите в таблице путей rnpath.",
"copy_message": "Копировать сообщение",
"message_copied": "Сообщение скопировано",
"failed_copy_message": "Не удалось скопировать сообщение",
@@ -1382,6 +1428,7 @@
"utilities": "Утилиты",
"power_tools": "Утилиты",
"diagnostics_description": "Сетевые и Reticulum-утилиты в одном месте: доступность, маршруты, передача файлов, перевод, документация и помощь с оборудованием. Откройте строку для полного инструмента.",
+ "back_to_tools": "Назад к инструментам",
"ping": {
"title": "Ping",
"description": "Измерение RTT до узла, который принимает ping."
@@ -2255,6 +2302,8 @@
"mode_change_later": "Настройки подключения можно изменить в любое время в параметрах Reticulum.",
"bootstrap_title": "Выберите начальные узлы",
"bootstrap_desc": "Начальные узлы дают обнаружению точку входа. Выберите один или несколько и продолжайте.",
+ "bootstrap_only_label": "Bootstrap-only для добавляемых интерфейсов",
+ "bootstrap_only_hint": "Каждый добавленный интерфейс помечается bootstrap_only (временно до автоподключения). По умолчанию можно сменить в разделе Интерфейсы.",
"bootstrap_desc_page": "Начальные узлы дают Reticulum точку входа, чтобы обнаружить остальную часть сети. Выберите один или несколько из обнаруженных или общественных узлов ниже.",
"bootstrap_discovered": "Обнаруженные узлы",
"bootstrap_community": "Общественные узлы",
diff --git a/meshchatx/src/frontend/locales/zh.json b/meshchatx/src/frontend/locales/zh.json
index a9094ac6..f09356a2 100644
--- a/meshchatx/src/frontend/locales/zh.json
+++ b/meshchatx/src/frontend/locales/zh.json
@@ -114,6 +114,14 @@
"show_community_interfaces": "显示社区接口",
"community_interfaces_description": "在添加新接口时显示社区维护的预设。",
"reliability": "可靠性",
+ "lxmf_settings_eyebrow": "LXMF",
+ "privacy_eyebrow": "隐私",
+ "privacy_data_title": "数据与本机",
+ "privacy_data_description": "本机消息记录、对信任节点的遥测。在此删除仅影响本机。",
+ "privacy_data": "数据与本机",
+ "privacy_subsection_device": "本机",
+ "privacy_subsection_telemetry": "Mesh 遥测",
+ "settings_map_eyebrow": "地图",
"messages_description": "配置 MeshChat 如何处理消息发送失败。控制自动重试行为、附件重传和回退机制,以确保通过网格网络可靠地发送消息。",
"auto_resend_title": "当节点广播时自动重发",
"auto_resend_description": "失败的消息在目标再次广播时会自动重试。",
@@ -125,6 +133,13 @@
"inbound_stamps_required_description": "关闭时,直接发送给您的 LXMF 消息不需要工作证明邮戳。开启后,在下面设置邮戳成本(越高意味着发送者需要做更多工作)。",
"inbound_stamp_cost": "入站消息邮戳成本",
"inbound_stamp_description": "需要入站邮戳时,直接发送消息的工作证明难度。范围:1-254。默认:8。",
+ "local_message_auto_delete_title": "在此设备上删除旧消息",
+ "local_message_auto_delete_description": "按设定时间从本地数据库删除消息。仅影响本机,他人仍保留各自副本。不会向网络发送删除指令。",
+ "local_message_auto_delete_age": "删除早于以下时间的消息",
+ "local_message_auto_delete_unit_aria": "保留期限的时间单位",
+ "local_message_auto_delete_unit_days": "天",
+ "local_message_auto_delete_unit_months": "月(每月按 30 天)",
+ "local_message_auto_delete_month_note": "“月”按每月 30 天计算。默认关闭。",
"browse_nodes": "浏览节点",
"propagation_nodes_description": "即使节点离线也能继续对话",
"nodes_info_1": "传播节点安全保存消息,直到收件人再次同步。",
@@ -195,6 +210,8 @@
"message_icon_size": "图标大小",
"detailed_outbound_send_status": "详细发送状态",
"detailed_outbound_send_status_description": "在消息发送时显示路径查找样式、旋转器和技术提示。关闭时,会显示单个静音勾选,直到发送需要几秒钟。",
+ "message_timestamp_grouping": "分组消息时间戳",
+ "message_timestamp_grouping_description": "开启时显示日期标题并在每条连续消息组只在末尾气泡显示时间。关闭时每条消息都显示时间并隐藏日期气泡。",
"search_settings": "搜索设置...",
"auto_resend": "自动重发",
"retry_attachments": "重试附件",
@@ -278,6 +295,13 @@
"blackhole_integration_description": "在 MeshChatX 中放逐用户时,Reticulum 传输层自动黑洞该身份。",
"announce_limits": "广播限制",
"announce_limits_description": "限制每个方面在数据库中保存的广播数量(最旧的最先被删除),以及每个 API 请求的载荷大小。还限制搜索和发现接口的载荷。清除数字字段并保存以恢复默认值。",
+ "announce_store_heading": "保存传入广播",
+ "announce_store_description": "关闭时,该类型的已接收广播不写入数据库。只影响存储,不影响网络或您自己发出的广播。本机托管的 NomadNet 页节点在关闭 NomadNet 存储时仍会在列表中。",
+ "announce_store_lxmf": "LXMF (lxmf.delivery)",
+ "announce_store_lxst": "LXST 电话 (lxst.telephony)",
+ "announce_store_nomad": "NomadNet 节点 (nomadnetwork.node)",
+ "announce_store_prop": "传播节点 (lxmf.propagation)",
+ "announce_store_git": "RNGit (git.repositories)",
"announce_max_stored_heading": "每个方面最大存储量(数据库)",
"announce_fetch_limit_heading": "默认页面大小(API)",
"announce_search_max_fetch": "广播搜索最大获取量",
@@ -767,7 +791,11 @@
"pagination_page_of": "第 {current} 页,共 {total} 页",
"path_unknown": "未知",
"recovery": "恢复",
+ "recovery_complete": "数据库恢复已完成。",
+ "recovery_confirm": "要运行数据库恢复吗?将执行完整完整性检查与 VACUUM,可能耗时较长且界面可能暂时无响应。不会从备份文件还原。",
"recovery_failed": "恢复失败",
+ "vacuum_complete": "数据库整理(VACUUM)已完成。",
+ "vacuum_failed": "无法对数据库执行整理。",
"reveal_config_file": "在文件夹中显示",
"reveal_database_file": "显示数据库",
"reticulum_config": "Reticulum 配置",
@@ -810,6 +838,8 @@
"failed_reload": "重新加载 Reticulum 失败!",
"interface_not_found": "未找到要编辑的选定接口。",
"discovery_settings_saved": "发现设置已保存",
+ "discovery_default_bootstrap_only": "新建出站 TCP 默认仅作引导",
+ "discovery_default_bootstrap_only_hint": "启用后,新建的 TCP 客户端(与 backbone 连接器)接口会设置 bootstrap_only,在达到 autoconnect_discovered_interfaces 后由 Reticulum 自动断开。",
"failed_save_discovery": "保存发现设置失败",
"no_interfaces_found_config": "在所选配置文件中未找到接口",
"failed_parse_config": "解析配置文件失败",
@@ -825,6 +855,9 @@
"community_presets_hidden_hint": "社区预设已隐藏。在此处或设置中再次显示。",
"community_presets_show_again": "显示社区预设",
"community_presets_empty": "未加载预设。重建捆绑包或添加 public/community_interfaces.json。",
+ "community_presets_refresh": "从 directory.rns.recipes 刷新社区接口预设",
+ "community_presets_refreshed": "已更新 {count} 个社区接口预设",
+ "community_presets_refresh_failed": "无法刷新社区接口预设",
"find_more_nodes": "查找更多节点",
"quick_import": "快速导入",
"quick_import_paste_hint": "粘贴原始配置",
@@ -1107,6 +1140,19 @@
"folders_imported": "文件夹已导入",
"failed_import_folders": "导入文件夹失败",
"failed_read_clipboard": "从剪贴板读取失败",
+ "clipboard_read_requires_secure_context": "读取剪贴板需要安全页面(https 或 http://127.0.0.1)。使用 http://0.0.0.0 等非本地 HTTP 地址会阻止剪贴板 API—请改用 127.0.0.1 或 https,或使用 Ctrl+V 粘贴。",
+ "clipboard_write_unavailable": "无法自动复制。请使用 https 或 http://127.0.0.1,或手动选择文本复制。",
+ "oversized_body_notice": "此消息过长,无法在此显示({count} 个字符)。请复制全文以便在其他应用中阅读或编辑。",
+ "oversized_body_copy": "复制全文",
+ "oversized_body_copied": "已复制全文",
+ "date_divider_today": "今天",
+ "date_divider_yesterday": "昨天",
+ "raw_path_interface_at_send": "路径接口(记录时)",
+ "raw_path_hops_at_send": "路径跳数(记录时)",
+ "raw_path_value_unknown": "未知",
+ "raw_path_finding_measure": "发送时的路径查找(出站)",
+ "raw_path_row_hash_rnpath": "路径表哈希(rnpath)",
+ "raw_path_row_hash_rnpath_hint": "与 Reticulum 此路由使用的目标哈希相同;可在 rnpath 路径表中搜索。",
"copy_message": "复制消息",
"message_copied": "消息已复制",
"failed_copy_message": "无法复制消息",
@@ -1442,6 +1488,7 @@
"utilities": "公用事业",
"power_tools": "公用事业",
"diagnostics_description": "网格与 Reticulum 常用工具集中在一处:可达性、路径、文件传输、翻译、文档与硬件辅助。点击任一行打开完整工具。",
+ "back_to_tools": "返回工具",
"ping": {
"title": "ing",
"description": "测量到一个接受ping的目的地的往返时间。"
@@ -2367,6 +2414,8 @@
"mode_change_later": "您可以随时从 Reticulum 设置中更改连接设置。",
"bootstrap_title": "选择引导节点",
"bootstrap_desc": "引导节点为发现提供起点。选择一个或多个,然后继续。",
+ "bootstrap_only_label": "为添加的接口启用仅引导模式",
+ "bootstrap_only_hint": "每个添加的接口会设为 bootstrap_only(在自动连接足够前为临时)。默认值可在“接口”中稍后修改。",
"bootstrap_desc_page": "引导节点为 Reticulum 提供起点,以便它可以发现网络的其余部分。从以下已发现或社区节点中选择一个或多个。",
"bootstrap_discovered": "已发现的节点",
"bootstrap_community": "社区节点",
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────